/**
 * Definition for a binary tree node.
 * function TreeNode(val, left, right) {
 *     this.val = (val===undefined ? 0 : val)
 *     this.left = (left===undefined ? null : left)
 *     this.right = (right===undefined ? null : right)
 * }
 */
/**
 * @param {number[]} nums
 * @return {TreeNode}
 */
var constructMaximumBinaryTree = function (nums) {
    // 递归三部曲
    const BuildTree = (arr, left, right) => {
        // 1. 终止条件：当l>r时，说明数组中已经没元素了，自然当前返回的节点为null。
        if (left > right)
            return null;
        let maxValue = -1, 
            maxIndex = -1; 
        // 获取最大值
        for (let i = left; i <= right; ++i) {
            if (arr[i] > maxValue) {
                maxValue = arr[i]; // 最大值
                maxIndex = i; // 最大值所在位置
            }
        }
        let root = new TreeNode(maxValue);
        // 根据maxIndex划分左右子树
        root.left = BuildTree(arr, left, maxIndex - 1);
        root.right = BuildTree(arr, maxIndex + 1, right);
        // 2. 返回值：返回的应该是当前已经构造好了最大二叉树的root节点。
        return root;
    }
    let root = BuildTree(nums, 0, nums.length - 1);
    return root;
};